package day07;

public class MemberInnerClass01 {
    public static void main(String[] args) {
        Outer01 outer01 = new Outer01();
        //相当于把 new Inner()当做outer01的一个成员 其实这个就是一种语法而已
        Outer01.Inner inner = outer01.new Inner();//这个是通过这个对象进行new了一个属于内部的一个对象出来
        //第二种 我们在外部类中写一个方法 可以返回一个inner08的对象实例出来
        Outer01.Inner inner1 = outer01.getInner();
        inner.say();//这里就可以直接去调用方法了
        //第三种方式的操作
        Outer01.Inner inner2 = new Outer01().new Inner();//这个就是和上边合起来了 没有创建外部类实例直接创建内部类的



    }
}
class Outer01{
    private int age=10;
    private String name="张三";
    //成员内部类是定义在外部类的成员上边的！！！！！！
    //成员内部类和成员可以一样 我们可以加public private 修饰符进行修饰都没有问题的
    class Inner{
        private int age=101;
        public void say(){
              //可以访问外部类的所有成员，包括私有的！
            System.out.println(Outer01.this.age);//重名的时候
            System.out.println(age+name);
        }
    }
    public void hi(){
        Inner inner = new Inner();
        inner.say();//在这里进行使用成员内部类
    }
    //这个方法返回一个Inner08的实例
    public Inner getInner(){
        return new Inner();//这里我们在这里实例化一个对象 在外部去接收，就是有点像get/set方法其实是
    }
}